import pandas as pd
import sys

# --- 1. 配置 (请根据需要修改) ---

# 输入文件路径
TABLE1_PATH = "/data0/lcy/trident/tools/saved_models/external_test_missing_files.csv"
TABLE2_PATH = "/data0/lcy/Patho-Bench/tools/tabel/data_info_zhujiang_with_scan_id.csv"

# 输出文件的路径
OUTPUT_PATH = "matched_missing_slides_info.csv"

# 定义两个表中用于匹配的键
# 假设:
# - 'external_test_missing_files.csv' (表1) 中有 'slide_id'
# - 'data_info_zhujiang_with_scan_id.csv' (表2) 中有 'scan_id'
KEY_TABLE1 = "slide_id"
KEY_TABLE2 = "scan_id"

# 定义两个文件的分隔符 (假设都是标准的CSV, 即逗号)
SEP_TABLE1 = ","
SEP_TABLE2 = ","

# --- 2. 脚本正文 ---


def merge_csv_files(file1_path, file2_path, output_path, key1, key2, sep1, sep2):
    """
    加载两个CSV文件，根据指定的键进行内部合并，并保存结果。
    """
    try:
        # 加载表格1
        df_table1 = pd.read_csv(file1_path, sep=sep1)
        print(f"成功加载: {file1_path} (共 {len(df_table1)} 行)")

        # 检查表1的键是否存在
        if key1 not in df_table1.columns:
            print(f"错误: 在文件 {file1_path} 中找不到键 '{key1}'。", file=sys.stderr)
            print(f"找到的列: {list(df_table1.columns)}", file=sys.stderr)
            return

    except FileNotFoundError:
        print(f"错误: 找不到文件 {file1_path}", file=sys.stderr)
        return
    except Exception as e:
        print(f"加载 {file1_path} 时发生错误: {e}", file=sys.stderr)
        return

    try:
        # 加载表格2
        df_table2 = pd.read_csv(file2_path, sep=sep2)
        print(f"成功加载: {file2_path} (共 {len(df_table2)} 行)")

        # 检查表2的键是否存在
        if key2 not in df_table2.columns:
            print(f"错误: 在文件 {file2_path} 中找不到键 '{key2}'。", file=sys.stderr)
            print(f"找到的列: {list(df_table2.columns)}", file=sys.stderr)
            return

    except FileNotFoundError:
        print(f"错误: 找不到文件 {file2_path}", file=sys.stderr)
        return
    except Exception as e:
        print(f"加载 {file2_path} 时发生错误: {e}", file=sys.stderr)
        return

    # 执行内部合并 (how='inner' 意味着只保留在两个表中都匹配上的行)
    print(f"\n正在合并... (使用 表1的'{key1}' 和 表2的'{key2}' 作为键)")
    merged_df = pd.merge(df_table1, df_table2, left_on=key1, right_on=key2, how="inner")

    # 报告结果
    print(f"合并完成。共找到 {len(merged_df)} 条匹配记录。")

    # 检查是否有自动重命名的列 (例如 'label_x', 'label_y')
    renamed_cols = [col for col in merged_df.columns if col.endswith("_x")]
    if renamed_cols:
        print("注意：发现同名列，已自动重命名。例如：")
        for col_base in [c[:-2] for c in renamed_cols]:
            if f"{col_base}_y" in merged_df.columns:
                print(
                    f"  - '{col_base}' -> '{col_base}_x' (来自 {file1_path}) 和 '{col_base}_y' (来自 {file2_path})"
                )

    # 保存到新的 CSV 文件
    try:
        merged_df.to_csv(output_path, index=False)
        print(f"成功将合并后的数据保存到: {output_path}")

        print("\n--- 合并后的数据预览 (前5行) ---")
        print(merged_df.head())

    except Exception as e:
        print(f"保存文件 {output_path} 时出错: {e}", file=sys.stderr)


# --- 3. 运行脚本 ---
if __name__ == "__main__":
    merge_csv_files(
        TABLE1_PATH,
        TABLE2_PATH,
        OUTPUT_PATH,
        KEY_TABLE1,
        KEY_TABLE2,
        SEP_TABLE1,
        SEP_TABLE2,
    )
